package ejb.cbm.operatoria.session;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import ejb.cbm.operatoria.entity.OperacionEfectivoEntity;
import ejb.cbm.operatoria.local.OperacionEfectivoSessionLocal;

////@Stateless
public class OperacionEfectivoSession extends HibernateDaoSupport implements OperacionEfectivoSessionLocal {
	
	static Logger logger = Logger.getLogger(OperacionEfectivoSession.class.getName());
	//property constants
	public static final String CODIGODIVISA = "codigodivisa";
	public static final String NUMEROCUENTA = "numerocuenta";
	public static final String NUMEROTARJETA = "numerotarjeta";
	public static final String IMPORTEINGRESADO = "importeingresado";
	public static final String IMPORTE = "importe";
	public static final String IMPORTEFEBLE = "importefeble";
	public static final String ITF = "itf";
	public static final String IMPORTETOTAL = "importetotal";
	public static final String DESCRIPCIONOBSERVACION = "descripcionobservacion";
	public static final String USUARIOAUTORIZACION = "usuarioautorizacion";
	public static final String CODIGOMOTIVOAUTORIZACION = "codigomotivoautorizacion";
	public static final String OBSERVACIONAUTORIZACION = "observacionautorizacion";
	public static final String ESTADOIMPRESION = "estadoimpresion";
	public static final String FLAGEXTORNO = "flagextorno";
	public static final String USUARIOREGISTRO = "usuarioregistro";
	public static final String USUARIOMODIFICACION = "usuariomodificacion";


    //@PersistenceContext 
	//private EntityManager entityManager;
	
	@Autowired
	public OperacionEfectivoSession(SessionFactory sessionFactory){
		super.setSessionFactory(sessionFactory);
	}
	
    public void save(OperacionEfectivoEntity transientInstance) {
    	logger.log("saving OperacionEfectivoEntity instance", Level.INFO, null,null);
        try {
            getSession().persist(transientInstance);
            logger.log("save successful", Level.INFO, null,null);
        } catch (RuntimeException re) {
        	logger.log("save failed", Level.FATAL,null, re);
            throw re;
        }
    }
    
    public void delete(OperacionEfectivoEntity persistentInstance) {
    	logger.log("deleting OperacionEfectivoEntity instance", Level.INFO, null,null);
        try {
            getSession().delete(persistentInstance);
            logger.log("delete successful", Level.INFO, null,null);
        } catch (RuntimeException re) {
        	logger.log("delete failed", Level.FATAL,null, re);
            throw re;
        }
    }
    
    public OperacionEfectivoEntity update(OperacionEfectivoEntity detachedInstance) {
    	logger.log("updating OperacionEfectivoEntity instance", Level.INFO, null,null);
        try {
            OperacionEfectivoEntity result = (OperacionEfectivoEntity) getSession().merge(detachedInstance);
            logger.log("update successful", Level.INFO, null,null);
            return result;
        } catch (RuntimeException re) {
        	logger.log("update failed", Level.FATAL,null, re);
            throw re;
        }
    }
    
    public OperacionEfectivoEntity findById( Long id) {
    	logger.log("finding OperacionEfectivoEntity instance with id: " + id, Level.INFO, null,null);
        try {
            OperacionEfectivoEntity instance = (OperacionEfectivoEntity) getSession().get(OperacionEfectivoEntity.class, id);
            return instance;
        } catch (RuntimeException re) {
        	logger.log("find failed", Level.FATAL,null, re);
            throw re;
        }
    }
    
    //@SuppressWarnings("unchecked")
    public List<OperacionEfectivoEntity> findByProperty(String propertyName, Object value) {
    	logger.log("finding OperacionEfectivoEntity instance with property: " + propertyName
    						+ ", value: " + value, Level.INFO, null,null);
		try {
			String queryString = "select model from OperacionEfectivoEntity model where model." 
			 						+ propertyName + "= :propertyValue";
			return getSession().createQuery(queryString)
 				.setParameter("propertyValue", value).list();
		} catch (RuntimeException re) {
			logger.log("find by property name failed", Level.FATAL,null, re);
			throw re;
		}
	}
	
	public List<OperacionEfectivoEntity> findByCodigodivisa(Object codigodivisa) {
		return findByProperty(CODIGODIVISA, codigodivisa);
	}
	
	public List<OperacionEfectivoEntity> findByNumerocuenta(Object numerocuenta) {
		return findByProperty(NUMEROCUENTA, numerocuenta);
	}
	
	public List<OperacionEfectivoEntity> findByNumerotarjeta(Object numerotarjeta) {
		return findByProperty(NUMEROTARJETA, numerotarjeta);
	}
	
	public List<OperacionEfectivoEntity> findByImporteingresado(Object importeingresado) {
		return findByProperty(IMPORTEINGRESADO, importeingresado);
	}
	
	public List<OperacionEfectivoEntity> findByImporte(Object importe) {
		return findByProperty(IMPORTE, importe);
	}
	
	public List<OperacionEfectivoEntity> findByImportefeble(Object importefeble) {
		return findByProperty(IMPORTEFEBLE, importefeble);
	}
	
	public List<OperacionEfectivoEntity> findByItf(Object itf) {
		return findByProperty(ITF, itf);
	}
	
	public List<OperacionEfectivoEntity> findByImportetotal(Object importetotal) {
		return findByProperty(IMPORTETOTAL, importetotal);
	}
	
	public List<OperacionEfectivoEntity> findByDescripcionobservacion(Object descripcionobservacion) {
		return findByProperty(DESCRIPCIONOBSERVACION, descripcionobservacion);
	}
	
	public List<OperacionEfectivoEntity> findByUsuarioautorizacion(Object usuarioautorizacion) {
		return findByProperty(USUARIOAUTORIZACION, usuarioautorizacion);
	}
	
	public List<OperacionEfectivoEntity> findByCodigomotivoautorizacion(Object codigomotivoautorizacion) {
		return findByProperty(CODIGOMOTIVOAUTORIZACION, codigomotivoautorizacion);
	}
	
	public List<OperacionEfectivoEntity> findByObservacionautorizacion(Object observacionautorizacion) {
		return findByProperty(OBSERVACIONAUTORIZACION, observacionautorizacion);
	}
	
	public List<OperacionEfectivoEntity> findByEstadoimpresion(Object estadoimpresion) {
		return findByProperty(ESTADOIMPRESION, estadoimpresion);
	}
	
	public List<OperacionEfectivoEntity> findByFlagextorno(Object flagextorno) {
		return findByProperty(FLAGEXTORNO, flagextorno);
	}
	
	public List<OperacionEfectivoEntity> findByUsuarioregistro(Object usuarioregistro) {
		return findByProperty(USUARIOREGISTRO, usuarioregistro);
	}
	
	public List<OperacionEfectivoEntity> findByUsuariomodificacion(Object usuariomodificacion) {
		return findByProperty(USUARIOMODIFICACION, usuariomodificacion);
	}
	

	//@SuppressWarnings("unchecked")
	public List<OperacionEfectivoEntity> findAll() {
		logger.log("finding all OperacionEfectivoEntity instances", Level.INFO,null, null);
		try {
			String queryString = "select model from OperacionEfectivoEntity model";
			return getSession().createQuery(queryString).list();
		} catch (RuntimeException re) {
			logger.log("find all failed", Level.FATAL,null, re);
			throw re;
		}
	}
}